home *** CD-ROM | disk | FTP | other *** search
/ Introducing the New Way to Shop from Home / Iceland.iso / pc / internetaccess.dir / 00316_Script_Jump to Marker Button < prev    next >
Text File  |  2003-03-05  |  14KB  |  395 lines

  1. -- DESCRIPTION --
  2.  
  3. on getBehaviorDescription me
  4.   return \
  5.     "JUMP TO MARKER BUTTON" & RETURN & RETURN & \
  6.     "A click on the sprite makes the playback head jump to a chosen marker in the same movie. " & \
  7.     "You can choose between the previous marker, the next marker, or any named marker in the movie." & RETURN & RETURN & \
  8.     "If more than one marker has the same name as the chosen marker, the playback head will jump to the first marker with that name in the movie. " & \
  9.     "If you need to use duplicate names, try adding a different number of spaces at the end of each, so that they appear the same but are in fact different." & RETURN & RETURN & \
  10.     "This behavior is designed for use with the Jump Back Button. " & \
  11.     "You can set it to record the frame number of the current marker so that the Jump Back Button can subsequently return. " & \
  12.     "Note: This feature relies on a global variable: gNavigationButtonList." & RETURN & RETURN & \
  13.     "Use the Jump to Movie Button behavior to jump to a marker in a different movie." & RETURN & RETURN & \
  14.     "PERMITTED MEMBER TYPES:" & RETURN & \
  15.     "Graphic members" & RETURN & RETURN & \
  16.     "PARAMETERS:" & RETURN & \
  17.     "* Jump to marker in this movie" & RETURN & \
  18.     "* 'Go to' or 'Play and return'?" & RETURN & \
  19.     "* Remember current marker for Back button" & RETURN & RETURN & \
  20.     "Select Remember Current Marker for Back Button to ensure that the behavior 'remembers' which markers have already been visited." & RETURN & RETURN & \
  21.     "Use the associated Jump Back Button behavior on a separate sprite to return to visited markers in reverse order." & RETURN & RETURN & \
  22.     "ASSOCIATED BEHAVIORS:" & RETURN & \
  23.     "* Jump to Movie button" & RETURN & \
  24.     "* Jump Back Button" & RETURN & \
  25.     "* Jump Forward Button" & RETURN & \
  26.     "* Push Button (to alter rollover / mouseDown states)"
  27. end getBehaviorDescription
  28.  
  29.  
  30. on getBehaviorTooltip me
  31.   return \
  32.     "Use with graphic members." & RETURN & RETURN & \
  33.     "When you drop this behavior on a sprite, you can choose which marker in the current movie to jump to on mouseUp. " & \
  34.     "You can also choose to jump to the next or the previous marker." & RETURN & RETURN & \
  35.     "Use this behavior with the Jump Back Button to allow the user to return to visited sequences."
  36. end getBehaviorTooltip
  37.  
  38.  
  39.  
  40. -- NOTES FOR DEVELOPERS --
  41.  
  42. -- The main handler is Jump, which is triggered by mouseUp.  The Initiialize 
  43. -- handler runs a series of error-checks.  These will alert designers 
  44. -- in any of the following cases:
  45. -- * if the chosen marker has been deleted or renamed
  46. -- * if more than one marker has the same name as the chosen marker
  47. -- * if the global gNavigationButtonList does not have a valid structure
  48.  
  49. -- USE OF 'BACK/FORWARD BUTTON' BEHAVIORS
  50. -- 
  51. -- This behavior is designed to be use in collaboration with 'Jump Back' and
  52. -- 'Jump Forward' buttons so that users can retrace their steps.
  53. --
  54. -- Information about what markers have already been visited is stored in a
  55. -- global variable: gNavigationButtonList.  As a global, this variable is
  56. -- available to all navigation behaviors, on any sprite in any movie.
  57. --
  58. -- gNavigationButtonList has the following structure:
  59. --   [#stack [...], #index: [...], #forward: [...]]
  60. -- Each of the subLists has the structure:
  61. --   [[#frame: <integer>, #movie: <movieName>], [...]]
  62. --
  63. -- #index is not currently exploited.  It provides a list of all markers
  64. -- visited, in the order of their first visit.  It could be used to create
  65. -- a pop-up menu, or to check if a player had visited a particular scene.
  66. --
  67. -- Information concerning the most recently visited marker is stored in the
  68. -- last item of the #stack list.  This item is copied to a local variable, 
  69. -- then removed from the #stack.  Information concerning the current marker
  70. -- is appended to the #forward list, so that users can subsequently retrace
  71. -- their steps.
  72.  
  73.  
  74.  
  75. -- HISTORY --
  76.  
  77. -- 10 September 1998: written for the D7 Behaviors Palette by James Newton
  78. -- 22 October 1998:   "play"/"go to" added, error-checking eased to allow
  79. --                     authors to use the behavior before creating markers.
  80. --  5 January   2000: updated to D8 <Kraig Mentor>
  81. --  14 February 2000: Added resolve handler. Added markerList conversion to
  82. --                    GDPL hander.
  83.  
  84.  
  85.  
  86. -- PROPERTIES --
  87.  
  88. -- author-defined parameters:
  89. property myMarker
  90. property myJumpMode
  91. property myReturn
  92.  
  93. global gNavigationButtonList -- Only declared if it is to be used
  94.  
  95.  
  96. -- EVENT HANDLERS --
  97.  
  98. on beginSprite me
  99.   resolve(me)
  100.   Initialize me
  101. end beginSprite
  102.  
  103. on mouseUp me
  104.   Jump me
  105. end prepareFrame
  106.  
  107.  
  108. -- CUSTOM HANDLERS --
  109.  
  110. on resolve me
  111.   --This handler is used to convert non-English languages to Lingo terms.
  112.   case myMarker of      
  113.     "next":
  114.       myMarker = #next
  115.     "loop":
  116.       myMarker = #loop
  117.     "previous":
  118.       myMarker = #previous
  119.   end case  
  120. end on
  121.  
  122.  
  123. on Initialize me -- sent BY beginSprite  
  124.   -- Error checking: Marker name
  125.   if not getPos ([#next, #previous, #loop], myMarker) then
  126.     -- Does myMarker still exist?
  127.     theMarkerList = RETURN&the labelList
  128.     markerExists = offset (RETURN&myMarker&RETURN, theMarkerList)
  129.     if not markerExists then
  130.       ErrorAlert me, #markerMissing, myMarker
  131.     else
  132.       -- Is myMarker still unique?
  133.       delete char 1 to markerExists of theMarkerList
  134.       if offset (RETURN&myMarker&RETURN, theMarkerList) then
  135.         ErrorAlert me, #runtime_DuplicateMarkers, myMarker
  136.       end if
  137.     end if
  138.   end if
  139.   
  140.   -- Error checking: Global variable
  141.   if myReturn then
  142.     global gNavigationButtonList -- Only declared if it is to be used
  143.     
  144.     if voidP (gNavigationButtonList) then
  145.       -- Initialize gNavigationButtonList
  146.       gNavigationButtonList = [#stack: [], #forward: [], #index: []]
  147.     else -- Is it the right global?
  148.       if gNavigationButtonList.ilk <> #propList then
  149.         ErrorAlert (me, #invalidGlobal, gNavigationButtonList)
  150.       else if not gNavigationButtonList.findPos(#stack) then
  151.         ErrorAlert (me, #invalidGlobal, gNavigationButtonList)
  152.       else if not gNavigationButtonList.findPos(#index) then
  153.         ErrorAlert (me, #invalidGlobal, gNavigationButtonList)
  154.       else if not gNavigationButtonList.findPos(#forward) then
  155.         ErrorAlert (me, #invalidGlobal, gNavigationButtonList)
  156.       end if
  157.     end if
  158.   end if
  159.   -- End of error checking
  160. end Initialize
  161.  
  162.  
  163. on Jump me -- sent by mouseUp
  164.   case myMarker of 
  165.     #previous:targetIsNewMarker = (marker (-the maxInteger / 2) <> marker (0))
  166.     #loop:    targetIsNewMarker = FALSE
  167.     #next:    targetIsNewMarker = (marker (0) <> marker (the maxInteger / 2))
  168.     otherwise
  169.       targetIsNewMarker = (marker (0) <> marker (myMarker))
  170.   end case
  171.   
  172.   if myReturn and targetIsNewMarker then
  173.     -- Remember where to come back to
  174.     global gNavigationButtonList -- Only declared if it is to be used
  175.     
  176.     currentMarker = [#frame: marker (0), #movie: the movieName]
  177.     -- Add currentMarker to #stack
  178.     gNavigationButtonList.stack.append(currentMarker)
  179.     -- Check if currentMarker is already in #index
  180.     if not gNavigationButtonList.index.getPos(currentMarker) then
  181.       gNavigationButtonList.index.append(currentMarker)
  182.     end if
  183.     -- Empty #forward list
  184.     gNavigationButtonList.forward = []
  185.   end if
  186.   
  187.   -- Go to frame indicated by myMarker
  188.   if myJumpMode  = "Go to" then
  189.     case myMarker of
  190.       #previous: go previous
  191.       #loop:     go loop
  192.       #next:     go next
  193.       otherwise
  194.         go marker (myMarker)
  195.     end case
  196.   else -- play => play done
  197.     case myMarker of
  198.       #previous: play marker (-1)
  199.       #loop:     play marker (0)
  200.       #next:     play marker (1)
  201.       otherwise:
  202.         play myMarker    
  203.     end case
  204.   end if
  205. end Jump
  206.  
  207.  
  208. on substituteStrings(me, parentString, childStringList) --------------
  209.   -- Sent by errorAlert
  210.   -- 
  211.   -- * Modifies parentString so that the strings which appear as
  212.   --   properties in childStringList are replaced by the values
  213.   --   associated with those properties.
  214.   --
  215.   -- <childStringList> has the format ["^1": "replacement string"]
  216.   --------------------------------------------------------------------
  217.   
  218.   i = childStringList.count()
  219.   repeat while i
  220.     tempString = ""
  221.     dummyString  = childStringList.getPropAt(i)
  222.     replacement  = childStringList[i]
  223.     lengthAdjust = dummyString.char.count - 1
  224.     repeat while TRUE
  225.       position = offset(dummyString, parentString)
  226.       if not position then
  227.         parentString = tempString&parentString
  228.         exit repeat
  229.       else
  230.         if position <> 1 then
  231.           tempString = tempString&parentString.char[1..position - 1]
  232.         end if
  233.         tempString = tempString&replacement
  234.         delete parentString.char[1..position + lengthAdjust]
  235.       end if
  236.     end repeat
  237.     i = i - 1
  238.   end repeat
  239.   
  240.   return parentString
  241. end substituteStrings 
  242.  
  243.  
  244.  
  245. -- ERROR CHECKING --
  246.  
  247. on ErrorAlert me, theError, data
  248.   -- Send by getPropertyDescriptionList, initialize
  249.   -- Determine the behavior's name
  250.   behaviorName = string (me)
  251.   delete word 1 of behaviorName
  252.   delete the last word of behaviorName
  253.   delete the last word of behaviorName
  254.   -- Convert #data to useful value
  255.   case data.ilk of
  256.     #void: data = "<void>"
  257.     #symbol: data = "#"&data
  258.   end case
  259.   
  260.   case theError of
  261.       
  262.     #getPDL_DuplicateMarkers:     
  263.       tError1 = "Two or more markers in this movie have the same name. " & \
  264.     " This could lead to " & RETURN & \
  265.     "confusion if you use this behavior to go to a named marker."  
  266.       tError2 = "Duplicate marker(s) = ^0"
  267.       tError2 = substituteStrings(me, tError2, ["^0":data])      
  268.       alert(tError1 & RETURN & RETURN & tError2)
  269.       
  270.     #markerMissing:
  271.       if the runMode = "Author" then        
  272.         tError1 = "BEHAVIOR ERROR: Frame ^0, Sprite ^1"
  273.         tError1 = substituteStrings(me, tError1, ["^0":the frame, "^1": the currentSpriteNum])
  274.         tError2 = "Behavior ^0"
  275.         tError2 = substituteStrings(me, tError2, ["^0": behaviorName])
  276.         tError3 = "The chosen marker no longer exists." & RETURN & \
  277.     "Choose a valid marker in the Behavior Parmeters dialog."
  278.         tError4 = "Current marker = ^0"
  279.         tError4 = substituteStrings(me, tError4, ["^0": data])
  280.         alert(tError1 & RETURN & RETURN & tError2 & RETURN & RETURN & tError3 & RETURN & RETURN & tError4)        
  281.       end if
  282.       abort      
  283.       
  284.     #runtime_DuplicateMarkers:
  285.       if the runMode = "Author" then
  286.         tError1 = "BEHAVIOR ERROR: Frame ^0, Sprite ^1"
  287.         tError1 = substituteStrings(me, tError1, ["^0":the frame, "^1": the currentSpriteNum])     
  288.         tError2 = "Behavior ^0"
  289.         tError2 = substituteStrings(me, tError2, ["^0": behaviorName])
  290.         tError3 = "The chosen marker does not  have a unique name. " & \
  291.     " The playback head will jump to the first marker with this name:"
  292.         tError4 = "Duplicate marker name = ^0"
  293.         tError4 = substituteStrings(me, tError4, ["^0": data])
  294.         alert(tError1 & RETURN & RETURN & tError2 & RETURN & RETURN & tError3 & RETURN & RETURN & tError4)                
  295.       end if
  296.       
  297.     #invalidGlobal:
  298.       tError1 = "BEHAVIOR ERROR: Frame ^0, Sprite ^1"
  299.       tError1 = substituteStrings(me, tError1, ["^0":the frame, "^1": the currentSpriteNum])   
  300.       tError2 = "Behavior ^0"
  301.       tError2 = substituteStrings(me, tError2, ["^0": behaviorName])
  302.       tError3 = "[#stack [...], #index: [...], #forward: [...]]"
  303.       tError4 = "Current value = ^0"
  304.       tError4 =  substituteStrings(me, tError4, ["^0": data])
  305.       alert(tError1 & RETURN & RETURN & tError2 & RETURN & RETURN & tError3 & RETURN & RETURN & tError4)
  306.       halt      
  307.   end case
  308. end ErrorAlert
  309.  
  310.  
  311.  
  312.  
  313.  
  314. on isOKToAttach (me, aSpriteType, aSpriteNum)
  315.   
  316.   tIsOK = 0  
  317.   if aSpriteType = #graphic then
  318.     tIsOK = 1
  319.   end if  
  320.   
  321.   return(tIsOK)  
  322. end on
  323.  
  324.  
  325. -- AUTHOR-DEFINED PARAMETERS --
  326.  
  327. on getPropertyDescriptionList me
  328.   
  329.   currentMember = sprite(the currentSpriteNum).member
  330.   
  331.   markersList = GetMarkers (me)
  332.   if markersList.count() = 2 then -- [[<markers>], [<duplicates>]]
  333.     ErrorAlert (me, #getPDL_DuplicateMarkers, markersList[2])
  334.   end if
  335.   
  336.   tLabelList = []
  337.   tLabelList.add("next")
  338.   tLabelList.add("loop")
  339.   tLabelList.add("previous")
  340.   
  341.   repeat with i = 1 to count(the markerList)
  342.     tLabelList.add((the markerList).getProp((the markerList).getPropAt(i)))    
  343.   end repeat
  344.  
  345.   return \
  346. [ \
  347.  #myMarker: \
  348.  [ \
  349.   #comment: "On mouseUp, jump to marker", \
  350.   #format: #string, \
  351.   #range: tLabelList,\
  352.   #default: "next"\
  353.  ], \
  354.  #myJumpMode: \
  355.  [ \
  356.   #comment: "Jump Mode", \
  357.   #format:  #string, \
  358.   #range:  ["Go to", "Play and Return"], \
  359.   #default: "Go to" \
  360.  ], \
  361.  #myReturn: \
  362.  [ \
  363.   #comment: "Remember current marker for Back button?", \
  364.   #format:  #boolean, \
  365.   #default:  TRUE \
  366.  ] \
  367. ]
  368. end getPropertyDescriptionList
  369.  
  370.  
  371. on GetMarkers me -- Sent by getPropertyDescriptionList
  372.   localMarkerList = []
  373.   duplicatesList = []
  374.   markerString = the labelList
  375.   delete the last char of markerString
  376.   markerCount = the number of lines of markerString
  377.   repeat with i = 1 to markerCount
  378.     theMarker = markerString.line [i]
  379.     if localMarkerList.getPos(theMarker) then
  380.       -- Duplicate marker name
  381.       if not duplicatesList.getPos(theMarker) then
  382.         duplicatesList.append(theMarker)
  383.       end if
  384.     else
  385.       localMarkerList.append(theMarker)
  386.     end if
  387.   end repeat
  388.   if duplicatesList.count() then
  389.     return [localMarkerList, duplicatesList]
  390.   else
  391.     return [localMarkerList] 
  392.   end if
  393. end GetMarkers
  394.  
  395.